package com.gopay.bis.dao.bankorder;

import java.util.List;

import com.gopay.common.base.dao.BaseDAO;
import com.gopay.common.domain.bank.BankOrder;
import com.gopay.common.domain.bank.BankRouteLog;

/**
 * 银行流水DAO
 * 
 * @BankOrderDAO.java
 * @author yaobo
 * @2013-2-5 下午03:29:06 www.gopay.com.cn Inc.All rights reserved.
 */
public interface BankOrderDAO extends BaseDAO<BankOrder, String> {

    /**
     * 银行流水更新为[银行处理成功]
     * 
     * @param orderId
     *            订单号
     * @return
     */
    public int updateBackSuccess(String orderId);

    /**
     * 银行流水更新为[银行处理成功] 同时更新银行流水号
     *
     * @param orderId 订单号
     * @param bankId 银行流水号
     * @return
     */
    public int updateBackSuccess(String orderId, String bankId);
    
    /**
     * 银行流水更新为[银行通知订单失败]
     * 
     * @param orderId
     *            订单号
     * @return
     */
    public int updateBackFail(String orderId);

    /**
     * 银行流水更新为[通知验签失败]
     * 
     * @param orderId
     *            订单号
     * @return
     */
    public int updateBackVerifyFail(String orderId);
    
    
    
    /**
     * 北京银行流水更新为[银行处理成功]
     * 
     * @param orderId
     *            订单号
     * @return
     */
    public int updateQueryBackSuccess(String orderId);

    /**
     * 北京银行流水更新为[通知验签失败]
     * 
     * @param orderId
     *            订单号
     * @return
     */
    public int updateQueryBackVerifyFail(String orderId);
    
    
    /**
     * 民生代扣单独更新对账为[银行处理成功]
     * 
     * @param bankOrder
     *           订单 
     * @return
     */
    public int updateQueryBackSuccess(BankOrder bankOrder,String bankOrderStatus);

    /**
     * 民生代扣单独更新对账为[通知验签失败]
     * 
     * @param bankOrder
     *           订单
     * @return
     */
    public int updateQueryBackVerifyFail(BankOrder bankOrder);
    
    public int lock(BankOrder bankOrder);

	public int unlock(BankOrder bankOrder);

	public int updateTotalCheckTimes(BankOrder bankOrder);
    
    public List<BankOrder> getBankOrdersByGopayOrderId(String orderId);
    
    /**
     * 银行流水置为成功，状态为[成功]
     * 
     * @return
     */
    public int updateBpsCheckSuccess(String orderId);
    
    /**
     * 银行流水置为失败，状态为[失败]
     * 
     * @return
     */
    public int updateBpsCheckFail(String orderId);
    
    /**
     * 银行流水置为其他，状态为[其他]
     * 
     * @return
     */
    public int updateBpsCheckOther(String orderId);
    
    /**
     * 银行流水更新为[入账失败]
     * 
     * @param orderId
     *            订单号
     * @return
     */
    public int updateInAcctFail(String orderId);
    
    /**
     * 记录前台通知时间
     * 
     * @param orderId
     *            订单号
     * @return
     */
    public int updateFrontBackTime(String orderId);
    
    /**
     * 获取退款银行流水
     * 
     * @param orderId
     * @return
     */
    public List<BankOrder> getBankOrdersByOriBankOrderId(String orderId);
    
    /**
     * 银行流水更新为[金额比对异常]
     * 
     * @param orderId
     *            订单号
     * @return
     */
    public int updateAmountError(String orderId);
    
    /**
     * 记录银行自动路由日志
     * 
     * @param bankRouteLog
     */
    public void addBankRouteLog(BankRouteLog bankRouteLog);

	public int updateCheckFail(BankOrder bankOrder);
	
	/**
	 * 更新银行订单流水号
	 * @param bankOrder
	 * @return
	 */
	public int updateBankOrderId(String outOrderId, String bankOrderId);
}
